/**
 * @author komasshu
 */
//////////////////////////////////////////////////
// Memo オブジェクト
//////////////////////////////////////////////////
ols = window.ols ? window.ols : {};

(function(){
	
	ols.Memo = {};

	/**
	 * メモを表示する。
	 */
	ols.Memo.show = function(){
		// メモ描画を初期化
		$('#contents').empty();
		
		// データを取得
		var datas_ = ols.DataCache.get();
		
		// メモを描画
		for(var i = 0, l = datas_.length; i < l; ++i) {
			var data_ = datas_[i];
			data_.lhash = "#"+data_.id;
			data_.title = data_.title == "" ? "無題" : data_.title;
			data_.body = data_.body == "" ? "ここにメモを入力" : data_.body;
			data_.body = data_.body.replace("\n", "<br>");
			data_.created_at = ols.ts2s(data_.created_at);
			data_.last_update = ols.ts2s(data_.last_update);
			data_.selected = (i == (l-1)) ? "selected" : "";
			$("#memoTemplate").tmpl(data_).prependTo('#contents');
		}
		
		this.setHandler();
	}
	
	/**
	 * memo本文に対するハンドラをセットする。該当のハンドラは以下の二つ。
	 * 1. メモの内容が変更されたことを検知するハンドラ
	 * 2. 削除ボタンが押されたことを検知するハンドラ
	 * 
	 * showメソッドが呼ばれるたびに、callされる。
	 */
	ols.Memo.setHandler = function(){
		var self_ = this;
		var last_ = "";

		// 変更を検知するハンドラ
		$(".edit").focus(function(){
			// focusが当たった時点のテキストを格納
			last_ = $(this).attr("data-prop") == "body" ? $(this).html() : $(this).text();
		}).blur(function(){
			// focusが外れた時点のテキストを取得
			var text_ = $(this).attr("data-prop") == "body"
				? $(this).html().replace(/(<div>|<\/div>|<script>|<\/script>)/g, "")
				: $(this).text();
			
			if(last_ != text_) {
				// 変更された
				var prop_ = $(this).attr("data-prop");
				var id_ = $(this).attr("data-id");
				self_.update(id_, prop_, text_);
			}
		})
		
		// 削除ボタンに対するハンドラを定義
		$(".btnremove").click(function(){
			var id_ = $(this).attr("data-id");
			self_.remove(id_);
		});
	}
	
	
	/**
	 * 新規メモを作成する
	 */
	ols.Memo.create = function(){
		ols.DataCache.create();
		this.show();
	}
	
	/**
	 * メモを削除する
	 * 
	 * @param {Number} id メモID
	 */
	ols.Memo.remove = function(opt_id){
		if(ols.DataCache.remove(opt_id) == true)
			this.show();
	}
	
	/**
	 * メモを更新する
	 * 
	 * @param {Number} opt_id メモID
	 * @param {Object} opt_prop 更新対象のプロパティ
	 * @param {Object} opt_val 更新値
	 */
	ols.Memo.update = function(opt_id, opt_prop, opt_val){
		console.log(opt_val);
		ols.DataCache.update(opt_id, opt_prop, opt_val);
	}
	
	/**
	 * Memoのタイトルをクリックすると、location.hashが変化する。
	 * anchorのhref属性と、locaiton.hashが一致するとき、
	 * 親要素の<section>のクラスを "selected" にする
	 * 
	 */
	ols.Memo.changeSelected = function(){
		if(location.hash == "#" || location.hash == "")
			return;
		
		$("#contents .title a").each(function(){
			$(this).parent().parent()[$(this).attr('href') == location.hash ? "addClass" : "removeClass"]("selected");
		});
	}
})();
